package com.yunke.dto.service;

import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;

import jakarta.validation.constraints.*;
import java.math.BigDecimal;

/**
 * 发布服务请求DTO
 * 
 * @author yunke
 * @since 1.0.0
 */
@Data
@Schema(description = "发布服务请求")
public class YunkeServicePublishDto {

    /**
     * 服务分类ID
     */
    @NotNull(message = "服务分类不能为空")
    @Schema(description = "服务分类ID", example = "1")
    private Long categoryId;

    /**
     * 服务标题
     */
    @NotBlank(message = "服务标题不能为空")
    @Size(min = 5, max = 100, message = "服务标题长度为5-100个字符")
    @Schema(description = "服务标题", example = "专业网站开发服务")
    private String title;

    /**
     * 服务描述
     */
    @NotBlank(message = "服务描述不能为空")
    @Size(min = 10, max = 500, message = "服务描述长度为10-500个字符")
    @Schema(description = "服务描述", example = "提供专业的网站开发服务，包括前端后端开发")
    private String description;

    /**
     * 服务封面图
     */
    @NotBlank(message = "服务封面图不能为空")
    @Schema(description = "服务封面图", example = "https://example.com/cover.jpg")
    private String coverImage;

    /**
     * 服务图片（多张，逗号分隔）
     */
    @Schema(description = "服务图片", example = "https://example.com/1.jpg,https://example.com/2.jpg")
    private String images;

    /**
     * 服务价格
     */
    @NotNull(message = "服务价格不能为空")
    @DecimalMin(value = "0.01", message = "服务价格必须大于0")
    @Schema(description = "服务价格", example = "100.00")
    private BigDecimal price;

    /**
     * 原价（划线价）
     */
    @Schema(description = "原价", example = "150.00")
    private BigDecimal originalPrice;

    /**
     * 价格单位：1-次 2-小时 3-天 4-月 5-年
     */
    @NotNull(message = "价格单位不能为空")
    @Min(value = 1, message = "价格单位值不正确")
    @Max(value = 5, message = "价格单位值不正确")
    @Schema(description = "价格单位：1-次 2-小时 3-天 4-月 5-年", example = "1")
    private Integer priceUnit;

    /**
     * 服务类型：1-线上服务 2-线下服务 3-上门服务
     */
    @NotNull(message = "服务类型不能为空")
    @Min(value = 1, message = "服务类型值不正确")
    @Max(value = 3, message = "服务类型值不正确")
    @Schema(description = "服务类型：1-线上服务 2-线下服务 3-上门服务", example = "1")
    private Integer serviceType;

    /**
     * 服务地区（线下服务时必填）
     */
    @Schema(description = "服务地区", example = "北京市朝阳区")
    private String serviceArea;

    /**
     * 服务地址（线下服务时必填）
     */
    @Schema(description = "服务地址", example = "朝阳区三里屯SOHO")
    private String serviceAddress;

    /**
     * 经度
     */
    @Schema(description = "经度", example = "116.447697")
    private Double longitude;

    /**
     * 纬度
     */
    @Schema(description = "纬度", example = "39.921373")
    private Double latitude;

    /**
     * 服务时长（分钟）
     */
    @Schema(description = "服务时长（分钟）", example = "120")
    private Integer duration;

    /**
     * 服务标签（多个标签逗号分隔）
     */
    @Schema(description = "服务标签", example = "网站开发,前端,后端")
    private String tags;

    /**
     * 服务详情（富文本）
     */
    @Size(max = 5000, message = "服务详情不能超过5000个字符")
    @Schema(description = "服务详情")
    private String content;

    /**
     * 联系方式
     */
    @Schema(description = "联系方式", example = "微信：yunke123")
    private String contact;

    /**
     * 是否支持议价：0-否 1-是
     */
    @Schema(description = "是否支持议价：0-否 1-是", example = "0")
    private Integer allowBargain;

    /**
     * 是否支持预约：0-否 1-是
     */
    @Schema(description = "是否支持预约：0-否 1-是", example = "1")
    private Integer allowReservation;
} 